home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / comm / misc / xprz31.lha / XprZmodem / XprZmodem.h < prev    next >
C/C++ Source or Header  |  1993-08-17  |  9KB  |  215 lines

  1. /*
  2.  *  xprzmodem.h: Definitions for xprzmodem.library;
  3.  *  Version 2.0, 28 October 1989, by Rick Huebner.
  4.  *  Released to the Public Domain; do as you like with this code.
  5.  *
  6.  *  Version 2.63, 30 July 1993 build in locale, by Rainer Hess
  7.  *
  8.  *  Version 2.64, 3 Aug 1993 global variable Blocksize, now in
  9.  *                struct Vars, by Rainer Hess
  10.  */
  11.  
  12. /* #define DEBUGLOG 1 */
  13.  
  14. /* Return codes */
  15. #define OK        0
  16. #define ERROR   (-1)
  17. #define TIMEOUT (-2)
  18. #define RCDO    (-3)
  19.  
  20. /* Relevant control characters */
  21. #define CR    ('M' & 0x1F)    /* ^M */
  22. #define DLE    ('P' & 0x1F)    /* ^P */
  23. #define XON    ('Q' & 0x1F)    /* ^Q */
  24. #define XOFF    ('S' & 0x1F)    /* ^S */
  25. #define CAN    ('X' & 0x1F)    /* ^X */
  26. #define CPMEOF    ('Z' & 0x1F)    /* ^Z */
  27.  
  28. /* Misc. program constants */
  29. #define LZMANAG          0    /* Default ZMODEM file management mode */
  30. #define LZTRANS          0    /* Default ZMODEM file transport mode */
  31. #define PATHLEN        256    /* What's the max legal path size? */
  32. #define CONFIGLEN     32    /* Max length of transfer options string */
  33. #define KSIZE           8192    /* Max allowable packet size */
  34. #define MINBLOCK     64    /* Min allowable packet size */
  35. #define MAXGOODNEEDED  8192    /* Max # good bytes req'd to bump packet size */
  36.  
  37. /* Provision for future 7-bit ZMODEM; for now, there's no difference */
  38. #define sendline xsendline
  39.  
  40. /*
  41.  * Replacement for global variables normally used, in order to make code
  42.  * fully reentrant; each invocation allocs their own Vars, and passes the
  43.  * struct pointer down through the entire program so they're always available.
  44.  * Pointer to this struct is usually able to be a register variable, so access
  45.  * is no worse than any stack variable (all register-relative).  Kinda
  46.  * kludgey, but the original ZModem code design depended on lots of globals,
  47.  * and I didn't want to redesign the whole damn thing.  Besides, it's more
  48.  * efficient than constantly pushing & popping args all over the place.
  49.  */
  50.  
  51. struct Vars
  52.   {
  53.     struct XPR_IO io;        /* Copy of XProto IO struct passed by term prog. */
  54.     struct XPR_UPDATE __aligned xpru;    /* Scratchpad xpr_update() control struct */
  55.     struct timeval __aligned Starttime;        /* Time transfer started */
  56.     UBYTE __aligned Rxhdr[4];    /* Received header */
  57.     UBYTE Txhdr[4];        /* Transmitted header */
  58.     UBYTE Msgbuf[128];        /* Scratchpad buffer for printing messages */
  59.     UBYTE Filename[PATHLEN];    /* Name of the file being up/downloaded */
  60.     UBYTE Pktbuf[KSIZE];        /* File data packet buffer */
  61.     UBYTE Modembuf[KSIZE * 2 + 256];    /* Input buffer for data from modem */
  62.     UBYTE Outbuf[KSIZE * 2 + 256];    /* Output buffer for data to modem */
  63.     UBYTE *Modemchar;        /* Next char to get from Modembuf */
  64.     UBYTE *Filebuf;        /* File I/O buffer address */
  65.     UBYTE *Filebufptr;        /* Current position within Filebuf */
  66.     long File;            /* Handle of file being transferred */
  67.     long Oldstatus;        /* Original terminal program's modem settings */
  68.     long Baud;            /* BPS setting of modem */
  69.     long Strtpos;        /* Starting byte position of transfer */
  70.     long Fsize;            /* Size of file being transferred */
  71.     long Rxbytes;        /* Number of bytes received so far */
  72.     long Filebufpos;        /* File offset of data in Filebuf */
  73.     long Filebufmax;        /* Size of Filebuf */
  74.     long Filebuflen;        /* Number of bytes currently stored in Filebuf */
  75.     long Filebufcnt;        /* Number of bytes remaining/written in Filebuf */
  76.     long Rxpos;            /* Received file position */
  77.     long Txpos;            /* Transmitted file position */
  78.     short Filcnt;        /* Number of files opened for transmission */
  79.     short Errcnt;        /* Number of files unreadable */
  80.     short Noroom;        /* Flags 'insufficient disk space' errors */
  81.     short Rxbuflen;        /* Largest frame they're willing to xfer */
  82.     short Tframlen;        /* Largest frame we're willing to xfer */
  83.     short Rxtimeout;        /* Tenths of seconds to wait for something */
  84.     short Tryzhdrtype;        /* Header type to send corresp to Last rx close */
  85.     short Modemcount;        /* Number of bytes available in Modembuf */
  86.     short Outbuflen;        /* Number of bytes currently stored in Outbuf */
  87.     short Rxframeind;        /* ZBIN or ZHEX; type of frame received */
  88.     short Txfcs32;        /* TRUE means send binary frame with 32 bit FCS */
  89.     short Rxflags;        /* Temp register */
  90.     short Wantfcs32;        /* want to send 32 bit FCS */
  91.     short Crc32t;        /* Display flag indicates 32 bit CRC being sent */
  92.     short Crc32;        /* Display flag indicates 32 bit CRC being recd */
  93.     short Rxtype;        /* Type of header received */
  94.     short Rxcount;        /* Count of data bytes received */
  95.     short Znulls;        /* Number of nulls to send at begin of ZDATA hdr */
  96.     short ErrorLimit;        /* How many sequential errors before abort */
  97.     char Rxbinary;        /* Force binary mode download? */
  98.     char Rxascii;        /* Force text mode download? */
  99.     char Thisbinary;        /* Receive this file in binary mode? */
  100.     char Lzconv;        /* Suggested binary/text mode for uploads */
  101.     char Eofseen;        /* Text-mode EOF marker (^Z) rec'd on download? */
  102.     UBYTE Zconv;        /* ZMODEM file conversion request */
  103.     UBYTE Zmanag;        /* ZMODEM file management request */
  104.     UBYTE Ztrans;        /* ZMODEM file transport request */
  105.     UBYTE Lastsent;        /* Last text char written by putsec() */
  106.     UBYTE Lastzsent;        /* Last char sent by zsendline() */
  107.     UBYTE Fileflush;        /* Flush file I/O buffer before closing? */
  108.     UBYTE Attn[ZATTNLEN + 1];    /* Attention string rx sends to tx on err */
  109.     LONG ksize;            /* Max allowable packet size */
  110.   };
  111.  
  112. /*
  113.  * Option settings and other variables needed outside of XProtocolSend/Receive;
  114.  * separated from rest of Vars so that huge Vars struct doesn't have to be
  115.  * allocated except during transfers.  Pointer to this struct kept in xpr_data.
  116.  */
  117. struct SetupVars
  118.   {
  119.     UBYTE *matchptr, *bufpos;
  120.     short buflen;
  121.     UBYTE option_t[2], option_o[2], option_b[8], option_f[8], option_e[8], option_s[4];
  122.     UBYTE option_r[4], option_a[4], option_d[4], option_k[4], option_p[256], option_m[8];
  123.   };
  124.  
  125. /* Function prototypes */
  126.  
  127. long __saveds __asm XProtocolSend (register __a0 struct XPR_IO *xio);
  128. short getzrxinit (struct Vars *v);
  129. void sendbatch (struct Vars *v);
  130. short sendone (struct Vars *v);
  131. short sendname (struct Vars *v);
  132. short zsendfile (struct Vars *v, short blen);
  133. short zsendfdata (struct Vars *v);
  134. short getinsync (struct Vars *v);
  135. void saybibi (struct Vars *v);
  136.  
  137. long __saveds __asm XProtocolReceive (register __a0 struct XPR_IO *xio);
  138. short rcvbatch (struct Vars *v);
  139. short tryz (struct Vars *v);
  140. short rzfiles (struct Vars *v);
  141. short rzfile (struct Vars *v);
  142. short procheader (struct Vars *v);
  143. short putsec (struct Vars *v);
  144. void ackbibi (struct Vars *v);
  145.  
  146. long __saveds __asm XProtocolSetup (register __a0 struct XPR_IO *xio);
  147. long __saveds __asm XProtocolCleanup (register __a0 struct XPR_IO *xio);
  148. long __saveds __asm XProtocolHostMon (
  149.                        register __a0 struct XPR_IO *xio,
  150.                        register __a1 char *serbuff,
  151.                        register __d0 long actual,
  152.                        register __d1 long maxsize);
  153. long __saveds __asm XProtocolUserMon (
  154.                        register __a0 struct XPR_IO *xio,
  155.                        register __a1 char *serbuff,
  156.                        register __d0 long actual,
  157.                        register __d1 long maxsize);
  158. struct Vars *setup (struct XPR_IO *io);
  159. UBYTE *find_option (UBYTE * buf, UBYTE option);
  160. void set_textmode (struct Vars *v);
  161. void canit (struct Vars *v);
  162. void zmputs (struct Vars *v, UBYTE * s);
  163. void xsendline (struct Vars *v, UBYTE c);
  164. void sendbuf (struct Vars *v);
  165. short readock (struct Vars *v, short tenths);
  166. char char_avail (struct Vars *v);
  167. void update_rate (struct Vars *v);
  168. long bfopen (struct Vars *v, UBYTE * mode);
  169. void bfclose (struct Vars *v);
  170. void bfseek (struct Vars *v, long pos);
  171. long bfread (struct Vars *v, UBYTE * buf, long length);
  172. long bfwrite (struct Vars *v, UBYTE * buf, long length);
  173. void ioerr (struct XPR_IO *io, char *msg);
  174. void upderr (struct Vars *v, char *msg);
  175. void updmsg (struct Vars *v, char *msg);
  176. long getfree (void);
  177. char exist (struct Vars *v);
  178.  
  179. #ifdef DEBUGLOG
  180. void dlog (struct Vars *v, UBYTE * s);
  181. #define DEBUGINFO (xprsprintf(v->Msgbuf, "Source: %-10s  Func: %-12s  Line: %4ld\n",__FILE__,__FUNC__,__LINE__), dlog(v, v->Msgbuf))
  182.  
  183. #ifdef DEBUGLEVEL2
  184. #define D(x) x
  185. #else
  186. #define D(x) ;
  187. #endif
  188. #endif
  189.  
  190. void zsbhdr (struct Vars *v, USHORT type);
  191. void zshhdr (struct Vars *v, USHORT type);
  192. void zsdata (struct Vars *v, short length, USHORT frameend);
  193. short zrdata (struct Vars *v, UBYTE * buf, short length);
  194. short zrdat32 (struct Vars *v, UBYTE * buf, short length);
  195. short zgethdr (struct Vars *v);
  196. short zrbhdr (struct Vars *v);
  197. short zrbhdr32 (struct Vars *v);
  198. short zrhhdr (struct Vars *v);
  199. void zputhex (struct Vars *v, UBYTE c);
  200. void zsendline (struct Vars *v, UBYTE c);
  201. short zgethex (struct Vars *v);
  202. short zdlread (struct Vars *v);
  203. short noxrd7 (struct Vars *v);
  204. void stohdr (struct Vars *v, long pos);
  205. long rclhdr (struct Vars *v);
  206.  
  207. extern ULONG UnixTimeOffset;
  208. ULONG getsystime (struct timeval *tv);
  209.  
  210. LONG xprsprintf (STRPTR buffer, STRPTR fmt,...);
  211.  
  212. extern STRPTR GetLocalString(struct LocaleInfo *, LONG);
  213.  
  214. /* End of XprZmodem.h source */
  215.